/**
 *	Python adapter to faif::ml::Classifier::AttrDomain class
 */
#pragma once

#include <boost/python.hpp>
#include "boost/python/detail/wrap_python.hpp"
#include <faif/learning/DecisionTree.hpp>
#include "zprDecisionTree.hpp"
#include <boost/tuple/tuple.hpp>
#include "typedefs.hpp"
#include "domainenumeratewrapper.hpp"

using namespace boost::python;
using namespace faif::ml;

typedef DTC::AttrDomain AttributeDomain;

template<typename T>
class ZPRAttrDomain {
	/**
	 *	iterator from tree to this attribute
	 */
	ZprAttrIdd attrDomain_;
    public:

		const typename T::Value& get() const;
		const typename T::DomainType& getDomain()const ;
		const ZPRAttrDomain<T>& getUnknown() ;
		bool isUnknown() const ;

		/*TODO:
			get
			getDomain
			getUnknown
			isUnknown
			=
			==
			!=
			serialize
		*/

		ZPRAttrDomain(const DTC::AttrIdd& attr);
		virtual ~ZPRAttrDomain(void);
};

template<typename Type>
struct ZPRAttrDomainWrapper {
	static PyObject* convert( ZPRAttrDomain<faif::ValueNominal<Type> > const& rv);
};

#include "zprAttrDomain_impl.hpp"
